package com.gack.business.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.gack.business.service.EnterpriseOperatorServiceInterface;
import com.gack.helper.common.AjaxJson;
import com.gack.helper.common.abstractobj.ApiController;

import io.swagger.annotations.ApiOperation;

@RestController
@RequestMapping(ApiController.ENTERPRISE_OPERATOR)
public class EnterpriseOperatorController {
	
	@Autowired
	private EnterpriseOperatorServiceInterface enterpriseOperatorService;
	
	/**
	 * 根据筛选条件,查询公司ItemVO集合
	 * @param page 所请求的页数  从0开始
	 * @param size 每页显示记录数量
	 * @param status 公司认证状态 0:未认证 1:已认证
	 * @param secondCondition 第二个筛选条件 1:公司名称 2:创建人名称 3:所属行业 4:所在地区
	 * @param input 输入匹配串
	 * @return
	 */
	@ApiOperation(value = "根据筛选条件,查询公司ItemVO集合", notes = "根据筛选条件,查询公司ItemVO集合")
	@PostMapping("findEnterpriseItemVOListByInput")
	public AjaxJson findEnterpriseItemVOListByInput(Integer page, Integer size, String status, String secondCondition, String input){
		AjaxJson ajaxJson = new AjaxJson();
		
		if(input == null){
			input = "";
		}
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findEnterpriseItemVOListByInput(page, size, status, secondCondition, input));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}

	/**
	 * 根据公司id,查询公司详细信息
	 * @param enterpriseId 公司id
	 * @return enterpriseBasicInfo:公司基本信息对象  enterpriseFramework:公司架构对象
	 */
	@ApiOperation(value = "根据公司id,查询公司详细信息", notes = "根据公司id,查询公司详细信息")
	@PostMapping("findEnterpriseDetail")
	public AjaxJson findEnterpriseDetail(String enterpriseId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findEnterpriseDetailByEnterpriseId(enterpriseId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 根据公司id,查询该公司所有一级部门ItemVO(若有无部门人员,则显示'无部门'选项)
	 * @param enterpriseId 公司id
	 * @return
	 */
	@ApiOperation(value = "根据公司id,查询该公司所有一级部门ItemVO(若有无部门人员,则显示'无部门'选项)", notes = "根据公司id,查询该公司所有一级部门ItemVO(若有无部门人员,则显示'无部门'选项)")
	@PostMapping("findTopDepartmentByEnterpriseId")
	public AjaxJson findTopDepartmentByEnterpriseId(String enterpriseId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findTopDepartmentByEnterpriseId(enterpriseId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 根据公司id和部门id查询某部门下所有人员ItemVO
	 * @param enterpriseId 公司id
	 * @param departmentId 一级部门id,若id为-1,则显示无部门人员信息
	 * @return
	 */
	@ApiOperation(value = "根据公司id和部门id查询某部门下所有人员ItemVO", notes = "根据公司id和部门id查询某部门下所有人员ItemVO")
	@PostMapping("findAllUserByEnterpriseIdAndDepartmentId")
	public AjaxJson findUserItemListByEnterpriseIdAndDepartmentId(String enterpriseId, String departmentId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findUserItemListByEnterpriseIdAndDepartmentId(enterpriseId, departmentId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 根据公司id,查询某公司的购卡记录(已支付的记录)(若page和size都为-1,则为全部查找;否则为分页查找) 按购买日期降序排序
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @param enterpriseId 公司id
	 * @return 
	 */
	@ApiOperation(value = "查询某公司的购卡记录(若page和size都为-1,则为全部查找;否则为分页查找)", notes = "查询某公司的购卡记录(若page和size都为-1,则为全部查找;否则为分页查找)")
	@PostMapping("findBusinessCardRecordByEnterpriseId")
	public AjaxJson findBusinessCardRecordByEnterpriseId(Integer page, Integer size, String enterpriseId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findBusinessCardRecordByEnterpriseId(page, size, enterpriseId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 根据公司id和筛选条件,查询消费记录(状态为:用户主动支付订单)(若page和size都为-1,则为全部查找,且不考虑筛选条件;否则为分页查找,考虑筛选条件)
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @param userNameForShow 筛选条件可选  用户名称  规则:若为已认证,则显示真实姓名,否则显示昵称
	 * @param departmentName 筛选条件可选  部门名称
	 * @param beginTime 筛选条件可选  会议开始时间
	 * @param endTime 筛选条件可选  会议结束时间
	 * @param enterpriseId 公司id
	 * @return 
	 */
	@ApiOperation(value = "查询消费记录(若page和size都为-1,则为全部查找,且不考虑筛选条件;否则为分页查找,考虑筛选条件)", notes = "查询消费记录(若page和size都为-1,则为全部查找,且不考虑筛选条件;否则为分页查找,考虑筛选条件)")
	@PostMapping("findOrderItemByEnterpriseId")
	public AjaxJson findOrderItemByEnterpriseId(Integer page, Integer size, String userNameForShow, String departmentName, String beginTime, String endTime, String enterpriseId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findOrderItemByEnterpriseId(page, size, userNameForShow, departmentName, beginTime, endTime, enterpriseId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 查询认证审核未通过的公司
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @return
	 */
	@ApiOperation(value = "查询认证审核未通过的公司", notes = "查询认证审核未通过的公司")
	@PostMapping("findCertificationNotPassedEnterpriseItemVO")
	public AjaxJson findCertificationNotPassedEnterpriseItemVO(Integer page, Integer size){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findCertificationNotPassedEnterpriseItemVO(page, size));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 查询已通过认证审核的公司
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @return
	 */
	@ApiOperation(value = "查询已通过认证审核的公司", notes = "查询已通过认证审核的公司")
	@PostMapping("findCertificationPassedEnterpriseItemVO")
	public AjaxJson findCertificationPassedEnterpriseItemVO(Integer page, Integer size){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findCertificationPassedEnterpriseItemVO(page, size));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}

	/**
	 * 查询已提交认证,但待审核的公司
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @return
	 */
	@ApiOperation(value = "查询已提交认证,但待审核的公司", notes = "查询已提交认证,但待审核的公司")
	@PostMapping("findCertificationWaitingEnterpriseItemVO")
	public AjaxJson findCertificationWaitingEnterpriseItemVO(Integer page, Integer size){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findCertificationWaitingEnterpriseItemVO(page, size));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 根据公司id,查询认证未通过公司详细信息
	 * @param enterpriseId 公司id
	 * @return
	 */
	@ApiOperation(value = "根据公司id,查询认证未通过公司详细信息", notes = "根据公司id,查询认证未通过公司详细信息")
	@PostMapping("findCertificationNotPassedEnterpriseDetailVO")
	public AjaxJson findCertificationNotPassedEnterpriseDetailVO(String enterpriseId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findCertificationNotPassedEnterpriseDetailVO(enterpriseId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 根据公司id,查询认证已通过公司详细信息
	 * @param enterpriseId 公司id
	 * @return
	 */
	@ApiOperation(value = "根据公司id,查询认证已通过公司详细信息", notes = "根据公司id,查询认证已通过公司详细信息")
	@PostMapping("findCertificationPassedEnterpriseDetailVO")
	public AjaxJson findCertificationPassedEnterpriseDetailVO(String enterpriseId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findCertificationPassedEnterpriseDetailVO(enterpriseId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}

	/**
	 * 根据公司id,查询已提交认证,但待审核的公司详细信息
	 * @param enterpriseId 公司id
	 * @return
	 */
	@ApiOperation(value = "根据公司id,查询已提交认证,但待审核的公司详细信息", notes = "根据公司id,查询已提交认证,但待审核的公司详细信息")
	@PostMapping("findCertificationWaitingEnterpriseDetailVO")
	public AjaxJson findCertificationWaitingEnterpriseDetailVO(String enterpriseId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.findCertificationWaitingEnterpriseDetailVO(enterpriseId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
	/**
	 * 拒绝或同意公司认证申请
	 * @param enterpriseId 公司id
	 * @param status 公司状态 拒绝:3  同意:1
	 * @param refuseReason 若拒绝,则需输入拒绝原因
	 * @param userId 操作者id
	 * @return
	 */
	@ApiOperation(value="拒绝或同意公司认证申请", notes = "拒绝或同意公司认证申请")
	@PostMapping("updateEnterpriseStatus")
	public AjaxJson updateEnterpriseStatus(String enterpriseId, String status, String refuseReason, String userId){
		AjaxJson ajaxJson = new AjaxJson();
		
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(enterpriseOperatorService.updateEnterpriseStatus(enterpriseId, status, refuseReason, userId));
		}catch(Exception e){
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setMsg("操作失败").setData(null);
		}
		
		return ajaxJson;
	}
	
}
